package com.gzx.risk.db.generator;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;

/**
 * MyBatis-Plus代码生成器 - 用于生成基础持久层代码
 *
 * @author generator
 */
public class CodeGenerator {

    public static void main(String[] args) {
        // 数据库连接配置 - 请根据实际情况修改
        String url = "jdbc:mysql://117.72.101.175:3306/gzx-risk?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
        String username = "root";  // 数据库用户名
        String password = "gzx@123";  // 数据库密码

        // 代码生成器
        FastAutoGenerator.create(url, username, password)
                // 全局配置
                .globalConfig(builder -> {
                    builder.author("qinpeng") // 设置作者
                            .enableSwagger() // 开启Swagger注解支持
                            .outputDir(System.getProperty("user.dir") +  "/risk-db/src/main/java");// 设置输出目录
                })
                // 包配置
                .packageConfig(builder -> {
                    builder.parent("com.gzx.spring.db") // 设置父包名
                            .entity("entity") // 设置实体类包名
                            .mapper("mapper") // 设置Mapper接口包名
                            .service("service") // 设置Service接口包名
                            .serviceImpl("service.impl") // 设置Service实现类包名
                            .pathInfo(Collections.singletonMap(OutputFile.xml,
                                    System.getProperty("user.dir") + "/risk-db/src/main/resources/com/gzx/spring/db/mapper")); // 设置Mapper XML文件输出路径
                })
                // 模板配置 - 关键：禁用不需要的模板
                .templateConfig(builder -> {
                    builder
                            // 禁用Controller模板
                            .controller(null)
                            // 保留其他需要的模板
                            .entity("templates/entity.java")
                            .mapper("templates/mapper.java")
                            .xml("templates/mapper.xml")
                            .service("templates/service.java")
                            .serviceImpl("templates/serviceImpl.java")
//                            .service(null)
//                            .serviceImpl(null)
                    ;
                })
                // 策略配置
                .strategyConfig(builder -> {
                    builder.addInclude("credit_user_authorization") // 设置需要生成的表名
                            .entityBuilder()
                            .enableLombok() // 开启Lombok注解支持
                            .enableTableFieldAnnotation() // 开启字段注解
                            .enableFileOverride() // 覆盖实体类

                            .mapperBuilder()
                            .enableMapperAnnotation() // 开启@Mapper注解
                            .enableBaseResultMap() // 开启BaseResultMap
                            .enableBaseColumnList() // 开启BaseColumnList
                            .enableFileOverride() // 覆盖Mapper接口

                            .serviceBuilder()
                            .formatServiceFileName("%sService") // 自定义Dao层命名规则（可选）
                            .formatServiceImplFileName("%sServiceImpl")
//                            .enableFileOverride() // 覆盖盖Dao层代码
                    ;
                })
                // 使用Freemarker模板引擎
                .templateEngine(new FreemarkerTemplateEngine())
                // 执行生成
                .execute();
    }
}